 // 思考题  ： 目录的拷贝  如何删除一个目录   如何把一个目录写成json数据
 //  {
 //     way:"拷贝",
 //     myurl:"E:\Node\node-JavaScript\node-code\00-00-00",
 //     url:"E:\Node\node-JavaScript\node-code\拷贝后的文件",




 // }
 class Directory {
     constructor(obj) {
         this.fs = require("fs")
         this.path = require("path")
         this.obj = obj
         this.init()
         this.num = -1;
     }
     init() {
         //判断操作  是需要拷贝 删除 还是以json数据返回
         let way = this.obj.way
         switch (way) {
             case "拷贝":
                 Directory.myurl = this.obj.myurl //父级目录地址 
                 Directory.url = this.obj.url //父级复制目录地址 
                 this.url = this.obj.url
                 this.myurl = this.obj.myurl // 当前父级目录地址

                 this.copys(this.myurl, this.url, true);

                 break
             case "删除":
                 this.myurl = this.obj.myurl
                 this.clear(this.myurl) //传入要删除的 路径
                 ;
                 break
             case "json":
                 Directory.myurl = this.obj.myurl //父级目录地址 
                 this.myurl = this.obj.myurl

                 this.arr = {
                     "目录": this.obj.myurl
                 }
                 this.myjson(this.myurl, true);
                 break

         }

     }
     myjson(myulr, fles) { //以json格式返回
         if (fles === true) { //读取源文件夹
             let arr = this.fs.readdirSync(myulr) //返回数组

   

             arr.forEach((item, i) => {

                 if (i > this.num) {
                     let str = this.myurl + "/" + item //当前目录
                     let is = this.judge(str) ///判断  是否是文件
                     if (is) { //是文件
                         //获取文本内容
                         let content = this.fs.readFileSync(str, "utf-8")
                         this.arr[item] = {
                             "name": item,
                             "url": str,
                             "text": content
                         }

                         //    console.log(this.arr);



                     } else { //是目录

                         this.isEach(this.myurl + "/" + item)

                     }
                 }
             })
             this.isEach(this.myurl)
             // this.ergodic(arr) //遍历文件夹数组
         }
     }
     isEach(str) {
         console.log("你是个" + str);
         this.myjson(str, true)
     }
     copys(myulr, url, fles) { //拷贝一份文件 到  url
         //  创建一个拷贝的目录
         console.log(myulr);
         if (!(this.fs.existsSync(url))) this.fs.mkdirSync(url)

         if (fles === true) { //读取源文件夹
             let arr = this.fs.readdirSync(myulr) //返回数组

             this.ergodic(arr) //遍历文件夹数组
         }

     }
     clear(myulr) { //删除当前目录
         let arr = this.fs.readdirSync(myulr)
         if (arr.length === 0) { //读取目录下的文件
             this.fs.rmdirSync(myulr)

         } else {
             this.clearFile(myulr, arr)
         }
     }
     clearFile(myulr, arr) { //删除arr下的文件
         arr.forEach(item => {
             let is = this.judge(this.path.join(myulr,item)) ///判断  是否是文件
             if (is) { //是文件就删除
                 this.fs.unlinkSync(this.path.join(myulr,item))
             } else {
                 this.clear(this.path.join(myulr,item))
             }
         })
         this.clear(myulr)

     }
     judge(str) { //判断  是否是文件夹

         let fs = this.fs
         let is = false
         console.log(str);
         console.log(fs.statSync(str).isFile());
        //  判断是文件还是目录
         if (fs.statSync(str).isFile()) { //判断当前路径指向的是文件还是目录
             is = true
         } else { //否则为目录
             // this.isurl = str //修改父级

         }
         console.log(is);
         return is
     }
     ergodic(arr) { //遍历文件夹数组//
         arr.forEach(item => {
             console.log("我是", Directory.myurl);
             let str =this.path.join( Directory.myurl ,item)  //当前目录拼接后的 路径
             console.log(str);
             let is = this.judge(str) ///判断  是否是文件
            console.log(str+"判断  是否是文件");
             console.log(is);
             if (is) {
                 // 当前路径指向的是文件 复制文件名称和内容放到新的目录中
                 this.copy(this.myurl,this.path.join(this.url,item))
             } else {
                 //调用复制 
                 if (!( this.fs.existsSync(this.path.join( Directory.url ,item)))) this.fs.mkdirSync(this.path.join( Directory.url ,item))
                 this.myurl = this.path.join( Directory.myurl ,item)
                 this.url =this.path.join( Directory.url ,item) 
                //  this.copys(this.myurl, this.url, true)
                console.log(this.myurl+"判断");
                console.log(this.url+"判断");

                 if (Directory.myurl !== this.myurl) {
                    let url = this.url
                    let i = url.lastIndexOf("/")
                    let str = url.slice(0, i)
                    this.url = str
                    let url2 = this.myurl
                    let i2 = url2.lastIndexOf("/")
                    let str2 = url2.slice(0, i2)
                    this.myurl = str2
                    console.log("葱啊no" + str);
                    console.log("达瓦达" + str2);
                }
             }
         });

       
         //  this.myurl = Directory.myurl
         //  this.url = Directory.url



     }
     copy(str, url) { //复制

         let fs = this.fs


         //读取文件信息
         let content = fs.readFileSync(str, "utf-8")
         console.log(content);
         //  //创建新文件并将读取到的信息存入
         fs.writeFileSync(url, content, "utf-8")
         // console.log(content); //抛出
     }

 }

 module.exports = {
     Directory
 }